home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI2 / LEZIONE5m4.s < prev    next >
Text File  |  1995-02-01  |  4KB  |  153 lines

  1.  
  2. ; Lezione5m4.s    "CHIUSURA" DELLA FINESTRA VIDEO CON I DIWSTART/STOP ($8e/$90)
  3.  
  4.     SECTION    CiriCop,CODE
  5.  
  6. Inizio:
  7.     move.l    4.w,a6        ; Execbase in a6
  8.     jsr    -$78(a6)    ; Disable - ferma il multitasking
  9.     lea    GfxName(PC),a1    ; Indirizzo del nome della lib da aprire in a1
  10.     jsr    -$198(a6)    ; OpenLibrary
  11.     move.l    d0,GfxBase    ; salvo l'indirizzo base GFX in GfxBase
  12.     move.l    d0,a6
  13.     move.l    $26(a6),OldCop    ; salviamo l'indirizzo della copperlist vecchia
  14.  
  15. ;     PUNTIAMO I NOSTRI BITPLANES
  16.  
  17.     MOVE.L    #PIC,d0        ; in d0 mettiamo l'indirizzo della PIC,
  18.     LEA    BPLPOINTERS,A1    ; puntatori nella COPPERLIST
  19.     MOVEQ    #2,D1        ; numero di bitplanes -1 (qua sono 3)
  20. POINTBP:
  21.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  22.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  23.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  24.     swap    d0        ; scambia le 2 word di d0 (es: 3412 > 1234)
  25.     ADD.L    #40*256,d0    ; + lunghezza bitplane -> prossimo bitplane
  26.     addq.w    #8,a1        ; andiamo ai prossimi bplpointers nella COP
  27.     dbra    d1,POINTBP    ; Rifai D1 volte POINTBP (D1=num of bitplanes)
  28. ;
  29.     move.l    #COPPERLIST,$dff080    ; Puntiamo la nostra COP
  30.     move.w    d0,$dff088        ; Facciamo partire la COP
  31.     move.w    #0,$dff1fc        ; Disattiva l'AGA
  32.     move.w    #$c00,$dff106        ; Disattiva l'AGA
  33.  
  34. mouse:
  35.     cmpi.b    #$ff,$dff006    ; Siamo alla linea 255?
  36.     bne.s    mouse        ; Se non ancora, non andare avanti
  37.  
  38.     btst    #2,$dff016    ; se il tasto destro e' premuto salta
  39.     beq.s    Aspetta        ; la routine dello scroll, bloccandolo
  40.  
  41.     bsr.w    DIWORIZZONTALE    ; mostrano la funzione dei DIWSTART e DIWSTOP
  42.     bsr.w    DIWVERTICALE    ; 
  43.  
  44. Aspetta:
  45.     cmpi.b    #$ff,$dff006    ; Siamo alla linea 255?
  46.     beq.s    Aspetta        ; Se si, non andare avanti, aspetta!
  47.  
  48.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  49.     bne.s    mouse        ; se no, torna a mouse:
  50.  
  51.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  52.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  53.  
  54.     move.l    4.w,a6
  55.     jsr    -$7e(a6)    ; Enable - riabilita il Multitasking
  56.     move.l    gfxbase(PC),a1    ; Base della libreria da chiudere
  57.     jsr    -$19e(a6)    ; Closelibrary - chiudo la graphics lib
  58.     rts            ; USCITA DAL PROGRAMMA
  59.  
  60. ;    Dati
  61.  
  62. GfxName:
  63.     dc.b    "graphics.library",0,0    
  64.  
  65. GfxBase:        ; Qua ci va l'indirizzo di base per gli Offset
  66.     dc.l    0    ; della graphics.library
  67.  
  68. OldCop:            ; Qua ci va l'indirizzo della vecchia COP di sistema
  69.     dc.l    0
  70.  
  71.  
  72. DIWORIZZONTALE:
  73.     CMPI.B    #$FF,DIWXSTART    ; Siamo arrivati al massimo DIWSTART?
  74.     BEQ.S    FINITO        ; se si, non possiamo procedere oltre
  75.     ADDQ.B    #2,DIWXSTART    ; se no, allora aggiungiamo 1
  76. FINITO:
  77.     TST.B    DIWXSTOP    ; Siamo arrivati al minimo DIWSTOP? ($00)
  78.     BEQ.S    FINITO2        ; se si non possiamo calare oltre
  79.     SUBQ.B    #2,DIWXSTOP    ; se no, allora sottraiamo1
  80. FINITO2:
  81.     RTS            ; Uscita dalla routine
  82.  
  83.  
  84. DIWVERTICALE:
  85.     CMPI.B    #$95,DIWYSTOP    ; Siamo arrivati al DIWSTOP giusto?
  86.     BEQ.S    FINITO3        ; se si, non dobbiamo procedere oltre
  87.     ADDQ.B    #1,DIWYSTART    ; aggiungiamo 1 allo start
  88.     SUBQ.B    #1,DIWYSTOP    ; sottraiamo 1 allo stop
  89. FINITO3:
  90.     RTS            ; Uscita dalla routine
  91.  
  92.     SECTION    GRAPHIC,DATA_C
  93.  
  94. COPPERLIST:
  95.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  96.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  97.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  98.     dc.w    $13e,$0000
  99.  
  100.     dc.w    $8E        ; DIWSTART - Inizio finestra video
  101. DIWYSTART:
  102.     dc.b    $2c        ; DIWSTRT $YY
  103. DIWXSTART:
  104.     dc.b    $81        ; DIWSTRT $XX (lo incrementiamo fino a $ff)
  105.  
  106.     dc.w    $90        ; DIWSTOP - Fine finestra video
  107. DIWYSTOP:
  108.     dc.b    $fe        ; DiwStop YY
  109. DIWXSTOP:
  110.     dc.b    $c1        ; DiwStop XX (lo caliamo fino a $00)
  111.     dc.w    $92,$0038    ; DdfStart
  112.     dc.w    $94,$00d0    ; DdfStop
  113.     dc.w    $102,0        ; BplCon1
  114.     dc.w    $104,0        ; BplCon2
  115.     dc.w    $108,0        ; Bpl1Mod
  116.     dc.w    $10a,0        ; Bpl2Mod
  117.  
  118.             ; 5432109876543210
  119.     dc.w    $100,%0011001000000000    ; bits 13 e 12 accesi!! (3 = %011)
  120.                     ; 3 bitplanes lowres, non lace
  121. BPLPOINTERS:
  122.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  123.     dc.w $e4,$0000,$e6,$0000    ;secondo bitplane
  124.     dc.w $e8,$0000,$ea,$0000    ;terzo     bitplane
  125.  
  126.     dc.w    $0180,$000    ; color0
  127.     dc.w    $0182,$475    ; color1
  128.     dc.w    $0184,$fff    ; color2
  129.     dc.w    $0186,$ccc    ; color3
  130.     dc.w    $0188,$999    ; color4
  131.     dc.w    $018a,$232    ; color5
  132.     dc.w    $018c,$777    ; color6
  133.     dc.w    $018e,$444    ; color7
  134.  
  135.     dc.w    $ca07,$fffe
  136.     dc.w    $180,$456    ; nota: il colore di fondo non viene coinvolto
  137.                 ; dal diwstart-diwstop
  138.  
  139.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  140.  
  141. ;    figura
  142.  
  143. PIC:
  144.     incbin    "amiga.320*256*3"    ; qua carichiamo la figura in RAW,
  145.                     ; convertita col KEFCON, fatta di
  146.                     ; 3 bitplanes consecutivi
  147.  
  148.     end
  149.  
  150. In questo listato sono modificate sia le XX che le YY dei DIWSTART e DIWSTOP
  151. per strangolare la figura.
  152.  
  153.